#!/bin/bash

set -e  # 遇到错误立即退出

# 默认安装目录
DEFAULT_BASE_DIR="/opt/traffic_monitor"

# 解析命令行参数
BASE_DIR="$TRAFFIC_MONITOR_HOME"  # 优先使用环境变量

while [[ $# -gt 0 ]]; do
    case $1 in
        -d|--dir)
            BASE_DIR="$2"
            shift 2
            ;;
        -h|--help)
            echo "用法: $0 [选项]"
            echo "选项:"
            echo "  -d, --dir PATH    设置安装目录"
            echo "                    默认: $DEFAULT_BASE_DIR"
            echo "                    环境变量: TRAFFIC_MONITOR_HOME"
            echo "  -h, --help        显示此帮助信息"
            echo ""
            echo "示例:"
            echo "  $0 -d /home/user/traffic_monitor"
            echo "  TRAFFIC_MONITOR_HOME=/custom/path $0"
            exit 0
            ;;
        *)
            echo "未知参数: $1"
            exit 1
            ;;
    esac
done

# 最终确定安装目录
BASE_DIR="${BASE_DIR:-$DEFAULT_BASE_DIR}"

echo "开始最小化安全安装..."
echo "安装目录: $BASE_DIR"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

log() {
    echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
}

warn() {
    echo -e "${YELLOW}[警告]${NC} $1"
}

error() {
    echo -e "${RED}[错误]${NC} $1"
}

# 检查并安装最小依赖
install_minimal_deps() {
    log "检查系统依赖..."
    
    # 检查tcpdump是否已安装
    if command -v tcpdump &> /dev/null; then
        log "✓ tcpdump 已安装"
        return 0
    fi
    
    warn "tcpdump 未安装，开始最小化安装..."
    
    if command -v yum &> /dev/null; then
        log "检测到CentOS/RedHat系统"
        
        # 最小化安装tcpdump，避免不必要依赖
        echo "正在安装tcpdump（最小化模式）..."
        yum install -y --setopt=tsflags=nodocs tcpdump 2>&1 | grep -E "(Installing|Installed|Complete)" || {
            # 如果失败，尝试更轻量的安装
            warn "标准安装失败，尝试最小依赖安装..."
            yum install -y --setopt=tsflags=nodocs libpcap tcpdump 2>&1 | tail -5
        }
        
    elif command -v apt-get &> /dev/null; then
        log "检测到Ubuntu/Debian系统"
        
        # 更新包列表但不升级系统
        apt-get update
        
        # 最小化安装tcpdump
        echo "正在安装tcpdump（最小化模式）..."
        apt-get install -y --no-install-recommends tcpdump 2>&1 | grep -E "(Installing|Unpacking|Setting up)" || {
            warn "标准安装失败，尝试最小依赖安装..."
            apt-get install -y --no-install-recommends libpcap0.8 tcpdump 2>&1 | tail -5
        }
        
    else
        error "不支持的Linux发行版"
        return 1
    fi
    
    # 验证安装
    if command -v tcpdump &> /dev/null; then
        log "✓ tcpdump 安装成功"
        return 0
    else
        error "tcpdump 安装失败"
        return 1
    fi
}

# 检查系统工具
check_system_tools() {
    log "检查系统工具..."
    
    local missing_tools=()
    
    # 检查必要工具
    for tool in tcpdump; do
        if ! command -v "$tool" &> /dev/null; then
            missing_tools+=("$tool")
        fi
    done
    
    # 检查可选工具（用于更好的体验）
    for tool in curl wget; do
        if ! command -v "$tool" &> /dev/null; then
            warn "可选工具 $tool 未安装（不影响核心功能）"
        fi
    done
    
    if [ ${#missing_tools[@]} -eq 0 ]; then
        log "✓ 所有必要工具已安装"
        return 0
    else
        warn "缺少必要工具: ${missing_tools[*]}"
        return 1
    fi
}

# 创建目录结构
create_directory_structure() {
    log "创建目录结构..."
    
    local dirs=(
        "$BASE_DIR"
        "$BASE_DIR/scripts"
        "$BASE_DIR/logs"
        "$BASE_DIR/archive"
        "$BASE_DIR/temp"
        "$BASE_DIR/config"
        "$BASE_DIR/logs/reports"
        "$BASE_DIR/logs/pcaps"
        "$BASE_DIR/logs/connections"
    )
    
    for dir in "${dirs[@]}"; do
        if [ ! -d "$dir" ]; then
            mkdir -p "$dir"
            log "  创建: $dir"
        else
            warn "  目录已存在: $dir"
        fi
    done
}

# 创建路径配置文件
create_paths_config() {
    log "创建路径配置文件..."
    
    cat > "$BASE_DIR/config/paths.conf" << EOF
# 流量监控系统路径配置
# 自动生成于: $(date)

BASE_DIR="$BASE_DIR"
SCRIPTS_DIR="\$BASE_DIR/scripts"
LOG_DIR="\$BASE_DIR/logs"
ARCHIVE_DIR="\$BASE_DIR/archive"
TEMP_DIR="\$BASE_DIR/temp"
CONFIG_DIR="\$BASE_DIR/config"

# 子目录
REPORTS_DIR="\$LOG_DIR/reports"
PCAPS_DIR="\$LOG_DIR/pcaps"
CONNECTIONS_DIR="\$LOG_DIR/connections"

# 系统信息
INSTALL_DATE="$(date '+%Y-%m-%d %H:%M:%S')"
HOSTNAME="$(hostname)"
EOF

    log "✓ 路径配置文件已生成: $BASE_DIR/config/paths.conf"
}

# 设置权限
set_permissions() {
    log "设置目录权限..."
    
    # 设置基础目录权限
    chmod 755 "$BASE_DIR"
    chmod 755 "$BASE_DIR/scripts"
    chmod 755 "$BASE_DIR/config"
    
    # 日志目录可写
    chmod 777 "$BASE_DIR/logs" "$BASE_DIR/temp" "$BASE_DIR/archive" 2>/dev/null || true
    chmod 777 "$BASE_DIR/logs/reports" "$BASE_DIR/logs/pcaps" "$BASE_DIR/logs/connections" 2>/dev/null || true
    
    log "✓ 目录权限设置完成"
}

# 显示安装摘要
show_installation_summary() {
    echo
    echo "=========================================="
    echo "   最小化安全安装完成"
    echo "=========================================="
    echo "安装目录: $BASE_DIR"
    echo "配置文件: $BASE_DIR/config/paths.conf"
    echo "日志目录: $BASE_DIR/logs/"
    echo "临时文件: $BASE_DIR/temp/"
    echo
    echo "已安装工具:"
    
    if command -v tcpdump &> /dev/null; then
        echo "  ✓ tcpdump: $(tcpdump --version 2>/dev/null | head -1 || echo '已安装')"
    else
        echo "  ✗ tcpdump: 未安装（需要手动安装）"
    fi
    
    echo
    echo "后续步骤:"
    echo "1. 将监控脚本复制到 $BASE_DIR/scripts/"
    echo "2. 设置脚本执行权限: chmod +x $BASE_DIR/scripts/*.sh"
    echo "3. 测试安装: $BASE_DIR/scripts/ctl.sh status"
    echo
    echo "注意: 此安装仅包含基础环境，需要手动部署监控脚本"
    echo "=========================================="
}

# 主安装流程
main() {
    log "开始流量监控系统最小化安装"
    
    # 检查当前用户权限
    if [ "$EUID" -ne 0 ]; then
        warn "当前不是root用户，部分操作可能需要sudo权限"
    fi
    
    # 执行安装步骤
    check_system_tools || install_minimal_deps
    create_directory_structure
    create_paths_config
    set_permissions
    
    show_installation_summary
}

# 执行主函数
main "$@"